package com.zy.explore.generator.infrastructure.core.brick.parent;

import com.zy.explore.generator.infrastructure.core.assembler.BrickInfoAssembler;
import com.zy.explore.generator.infrastructure.core.base.BaseModule;
import com.zy.explore.generator.infrastructure.core.frm.BrickInfoFrm;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.IOException;

/**
 * 建类说明：生成Validator校验类
 * 当前版本：1.0.0
 *
 * @author 中国印
 * @date 2022年01月08日
 * @since 1.0.0
 */
@Slf4j
@Service
public class GenerationValidator extends BaseModule {

    public void doGeneration(BrickInfoFrm frm) throws Exception {
        if (frm.getUseJpa()) {
            genJpaValidator(frm);
        }
        if (frm.getUseTkMybatis()) {
            genTkValidator(frm);
        }
        if (frm.getUseMybatisPlus()) {
            genMpValidator(frm);
        }
        log.info("创建Facade文件成功");
    }

    private void genMpValidator(BrickInfoFrm frm) throws IOException, TemplateException {
        frm.setFileName((frm.getTrimPrefix() ? "" : "Mp") + frm.getTableClassNamePrefix() + "Validator.java");

        // 要生成的文件对象(文件绝对位置 + 文件名称)
        File file = new File(frm.getProviderCodeRoot(), BrickInfoAssembler.getLastFilePath(frm));

        // 获取模板文件的位置
        String templatePath = BrickInfoAssembler.getBrickTemplatePath(frm) + "/mybatisplus";

        // 写入文件
        writeFile(file, "MpValidator.ftl", templatePath, frm);

        log.info("创建文件Mp{}Validator.java成功 {}", frm.getTableClassNamePrefix(), file.getPath());
    }

    private void genTkValidator(BrickInfoFrm frm) throws IOException, TemplateException {
        frm.setFileName((frm.getTrimPrefix() ? "" : "Tk") + frm.getTableClassNamePrefix() + "Validator.java");

        // 要生成的文件对象(文件绝对位置 + 文件名称)
        File file = new File(frm.getProviderCodeRoot(), BrickInfoAssembler.getLastFilePath(frm));

        // 获取模板文件的位置
        String templatePath = BrickInfoAssembler.getBrickTemplatePath(frm) + "/tkmybatis";

        // 写入文件
        writeFile(file, "TkValidator.ftl", templatePath, frm);

        log.info("创建文件Tk{}Validator.java成功 {}", frm.getTableClassNamePrefix(), file.getPath());
    }

    private void genJpaValidator(BrickInfoFrm frm) throws IOException, TemplateException {
        frm.setFileName((frm.getTrimPrefix() ? "" : "Jpa") + frm.getTableClassNamePrefix() + "Validator.java");

        // 要生成的文件对象(文件绝对位置 + 文件名称)
        File file = new File(frm.getProviderCodeRoot(), BrickInfoAssembler.getLastFilePath(frm));

        // 获取模板文件的位置
        String templatePath = BrickInfoAssembler.getBrickTemplatePath(frm) + "/jpa";

        // 写入文件
        writeFile(file, "JpaValidator.ftl", templatePath, frm);

        log.info("创建文件{}JpaValidator.java成功 {}", frm.getTableClassNamePrefix(), file.getPath());
    }

}
